Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Βοήθεια με Query χρησιμοποιόντας Parameters

Îåêßíçóå áðü ôï ìÝëïò vwpolo16v. Τελευταία δημοσίευση από το μέλος vwpolo16v στις 09-03-2009, 19:19. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-03-2009, 16:09 49045

    Βοήθεια με Query χρησιμοποιόντας Parameters

    Καλησπέρα...

    Θα ήθελα την βοήθειά σας σε κάτι

    Θέλω να χρησιμοποιήσω το εξείς query "select * from orders where orderid in (@param1)"

    Το ερώτημά μου είναι, πως μπορώ να πω οτι το @param1 δεν αποτελείτε απο μια τιμή, αλλα απο πολλαπλές (πχ in (312,313,314)) χωρίς να χρησιμοποιήσω @param1,@param2,@param3

    Ευχαριστώ...

     

  •  09-03-2009, 16:45 49048 σε απάντηση της 49045

    Απ: Βοήθεια με Query χρησιμοποιόντας Parameters

    Τι θες να κάνεις ακριβώς, η sql έχει OR και AND, αλλά φαντάζομαι ότι κάτι άλλο θες. Γίνε πιο αναλυτικός
  •  09-03-2009, 17:00 49050 σε απάντηση της 49045

    Απ: Βοήθεια με Query χρησιμοποιόντας Parameters

    Κάτι τέτοιο δεν γίνεται. Δεν μπορείς να περάσεις λίστα από παραμέτρους, μόνο μία παράμετρο. Για να περάσεις λίστα από παραμέτρους θα πρέπει να χρησιμοποιήσεις τεχνάσματα.

    •  Στον SQL Server 2008 μπορείς να χρησιμοποιήσεις Table Valued parameters για να περάσεις ένα πίνακα τιμών ως παράμετρο. Θα πρέπει να ορίσεις τον τύπο του πίνακα σε επίπεδο βάσης και μετά θα πρέπει να κάνεις Join την παράμετρο που περιέχει τον πίνακα με το select σου. Μία σύντομη περιγραφή θα βρεις εδώ και documentation στο MSDN. Το καλό είναι ότι διατηρείς το type safety. Το κακό είναι ότι πρέπει να ορίσεις τον τύπο σε επίπεδο βάσης.
    • Μπορείς να περάσεις τη λίστα ως ένα string με νούμερα χωρισμένα με , ή ;. Απλό μεν και δουλεύει σε κάθε έκδοση του SQL Server. Χάνεις το type-safety δε, ενώ θα πρέπει να κάνεις parse το string με T-SQL. Μία πονεμένη ιστορία, εκτός και χρησιμοποιήσεις .NET assemblies μέσα στην T-SQL για να κάνεις το parsing.
    • Μπορείς να χρησιμοποιήσεις παράμετρο τύπου XML και να περάσεις τη λίστα ως XML. Δουλεύει μόνο σε SQL Server 2005 και μετά, μεταφέρεις πολύ περισσότερα δεδομένα, αλλά το parsing είναι ευκολότερο.
    • Άλλα τρικ που δεν θυμάμαι

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-03-2009, 17:09 49051 σε απάντηση της 49050

    Απ: Βοήθεια με Query χρησιμοποιόντας Parameters

    Ευχαριστώ πολύ για τις πληροφορίες.
  •  09-03-2009, 17:27 49052 σε απάντηση της 49045

    Απ: Βοήθεια με Query χρησιμοποιόντας Parameters

    Αν χρησιμοποιείς TableAdapters και DataSets μπορείς ν' αφήσεις το query ως έχει, με μία παράμετρο, και να θέσεις την τιμή ClearBeforeFill του TableAdapter σε false. Με τον τρόπο αυτό μπορείς να κρατήσεις τις τιμές σε ένα array ή λίστα και να κάνεις fill τόσες φορές όσες χρειάζεσαι για να γεμίσεις το DataTable με όλα τα δεδομένα. Βέβαια, αν η τιμή είναι false, τότε θα πρέπει να καθαρίζεις μόνος σου το DataTable, οπότε χρειάζεται λίγη προσοχή. Μπορείς, πάλι, να "παίζεις" μέσα στον κώδικα με την τιμή του ClearBeforeFill.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  09-03-2009, 17:33 49053 σε απάντηση της 49052

    Απ: Βοήθεια με Query χρησιμοποιόντας Parameters

    Προσπαθώ όσο μπορώ να αποφεύγω τα datasets,dataadapters... Προτιμώ το connected model. Αλλα ευχαριστώ για την πληροφορία...
  •  09-03-2009, 17:49 49054 σε απάντηση της 49045

    Απ: Βοήθεια με Query χρησιμοποιόντας Parameters

    Θα πρέπει να χρησιμοποιήσεις @param1,@param2,@param3 αλλά επειδή τυπικά δεν θα ξέρεις πόσα items θα έχεις στην IN λίστα, θα πρέπει να κατασκευάσεις δυναμικά το statement και τα command parameters. Κάτι σαν το παρακάτω:

    Function GetCommand(ByVal strSQL As String, ByVal values As String()) As SqlCommand
       Dim params As String() = values.Select(Function(s, i) "@param" & i.ToString()).ToArray()
       Dim sqlCmd As SqlCommand = New SqlCommand(String.Format(strSQL, String.Join(",", params)))
       For i As Integer = 0 To params.Length - 1
          sqlCmd.Parameters.AddWithValue(params(i), values(i))
       Next

       Return sqlCmd
    End Function

    Οπότε, μετά χρησιμοποιείς το function κάπως έτσι:

    Dim strSQL As String = "SELECT * FROM Orders WHERE OrderId IN ({0})"
    Dim values As String() = New String() {"value1", "value2", "value3", "value4", "value5"}
    Dim cmd As SqlCommand = GetCommand(strSQL, values)

     

     

     


    Vir prudens non contra ventum mingit
  •  09-03-2009, 19:19 49055 σε απάντηση της 49054

    Απ: Βοήθεια με Query χρησιμοποιόντας Parameters

    Χιλια Ευχαριστώ...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems